package kr.hkit.wordnote.fragment;

import java.util.ArrayList;

import org.apache.http.impl.EnglishReasonPhraseCatalog;

import kr.hkit.wordnote.R;
import kr.hkit.wordnote.db.WordDBHelper;
import kr.hkit.wordnote.exception.DBException;
import kr.hkit.wordnote.main.ActionTab;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class WordInputFragment extends Fragment {
	final static String TAG = "WordSearchFragment";
	OnWordChangedListener mHost;
	
	public static WordInputFragment newInstance(ArrayList<String> engList){
		//넘겨받은 engword 목록을 번들에 저장한다. 
		WordInputFragment frag = new WordInputFragment();
		Bundle args = new Bundle();
		args.putSerializable("engList", engList);
		frag.setArguments(args);
		
		return frag;
	}
	
	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		try{
			mHost = (OnWordChangedListener)activity;
		}catch(ClassCastException e){
			throw new ClassCastException("액티비티는 OnWirdChanged를 구현해야합니다.");
		}
		
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.wordinputfragment, container, false);
		
		//버튼에 클릭 리스너를 달아준다.
		Button btnOk = (Button)linear.findViewById(R.id.btn_ok);
		btnOk.setOnClickListener(mClick);
		Button btnCancel = (Button)linear.findViewById(R.id.btn_cancel);
		btnCancel.setOnClickListener(mClick);
		return linear;
	}
	
	
	public OnClickListener mClick = new OnClickListener() {
		@Override
		public void onClick(View v) {
			Log.d(TAG, "onClick");
			//번들로부터 현재 저장되어 있는 engword의 목록을 받아온다. 
			final ArrayList<String> engList = (ArrayList<String>)getArguments().get("engList");
			
			switch(v.getId()){
			case R.id.btn_ok:
				//editText의 문자열을 추출한다. 
				EditText engEdit = (EditText)getActivity().findViewById(R.id.engedit);
				final String eng = engEdit.getText().toString();
				EditText korEdit = (EditText)getActivity().findViewById(R.id.koredit);
				final String kor = korEdit.getText().toString();

				//arrayList에 입력한 단어가 이미 존재 하는지 검사한다. 
				//존재 한다면 wordCk를 true로 바꾼다.
				boolean wordCk = false;
				for(int i=0; i<engList.size(); i++){
					if(engList.get(i).equals(eng)){
						wordCk = true;
						break;
					}
				}
				
				//'추가'버튼을 누르면 대화상자를 띄운다.
				//같은 단어가 존재하지 않으면, '추가' 대화상자를 띄운다. 
				if(wordCk == false){
					new AlertDialog.Builder(getActivity())
					.setTitle("단어추가")
					.setMessage(eng+" ("+kor+") "+" 단어를 추가 하시겠습니까?")
					.setCancelable(false)
					.setPositiveButton("추가", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							WordDBHelper helper = null;
							try {
								helper = new WordDBHelper(getActivity());
								helper.insertWord(eng, kor);
								engList.add(eng);
								//단어 추가가 되었음을 액티비티에 알린다.
								mHost.onWordChanged(1);
								Toast.makeText(getActivity(), "입력완료", 0).show();
							} catch (DBException e) {
								Toast.makeText(getActivity(), e.getMessage(), 0).show();
							} finally {
								helper.close();
							}
						}
					})
					.setNegativeButton("취소", null)
					.show();
					
				//단어가 이미 존재 한다면, '편집' 대화상자를 띄운다.
				} else {
					new AlertDialog.Builder(getActivity())
					.setTitle("단어편집")
					.setMessage("이미 저장된 단어입니다\n"+eng+" ("+kor+") "+"\n내용을 덮어 쓰시겠습니까?")
					.setCancelable(false)
					.setPositiveButton("덮어쓰기", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							WordDBHelper helper = null;
							try {
								helper = new WordDBHelper(getActivity());
								helper.updateWord(eng, kor);
								//단어가 갱신 되었음을 액티비티에 알린다.
								mHost.onWordChanged(1);
								Toast.makeText(getActivity(), "편집완료", 0).show();
							} catch (DBException e) {
								Toast.makeText(getActivity(), e.getMessage(), 0).show();
							} finally {
								helper.close();
							}
						}
					})
					.setNegativeButton("취소", null)
					.show();
				}
				break;
				
			//'취소'버튼을 누르면 editText의 내용을 리셋한다.
			case R.id.btn_cancel:
				engEdit = (EditText)getActivity().findViewById(R.id.engedit);
				korEdit = (EditText)getActivity().findViewById(R.id.koredit);
				engEdit.setText("");
				korEdit.setText("");
				break;
			}
		}
	};
	
	
	@Override
	public void onPause() {
		Log.d(TAG, "onPause");
		super.onPause();
		//프레그먼트가 화면에서 사라질 때, editText의 내용을 리셋한다. 
		EditText engEdit = (EditText)getActivity().findViewById(R.id.engedit);
		EditText korEdit = (EditText)getActivity().findViewById(R.id.koredit);
		engEdit.setText("");
		korEdit.setText("");
	}
	
	public interface OnWordChangedListener{
		public void onWordChanged(int checkNum);
	}
}
